package com.example.springboot.service.impl;

import com.example.springboot.entity.Menu;
import com.example.springboot.mapper.MenuMapper;
import com.example.springboot.service.IMenuService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Map;
import java.util.List;
import java.util.stream.Collectors;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author cpf
 *
 */
@Service
public class MenuServiceImpl implements IMenuService{
    @Resource
    private MenuMapper menuMapper;

    /**
    * 通过ID查询单条数据
    *
    * @param id 主键
    * @return 实例对象
    */
    @Override
    public Menu queryById(Integer id){
        return this.menuMapper.queryById(id);
    }

    /**
    * 条件查询
    * @Param param 查询条件
    */
    @Override
    public List<Menu>queryAllInfo(Map<String,Object> param){
        List<Menu> list = menuMapper.queryAllInfo(param);
        // 找出pid为null的一级菜单
        List<Menu> parentNodes = list.stream().filter(menu -> menu.getPid() == null).collect(Collectors.toList());
        // 找出一级菜单的子菜单
        for (Menu menu : parentNodes) {
            // 筛选所有数据中pid=父级id的数据就是二级菜单
            menu.setChildren(list.stream().filter(m -> menu.getId().equals(m.getPid())).collect(Collectors.toList()));
        }
        return parentNodes;
    }
    /**
    * 新增数据
    *
    * @param menu 实例对象
    * @return 实例对象
    */
    @Override
    public int insert(Menu menu){
        //加入逻辑代码
        return this.menuMapper.insert(menu);
    }

    /**
    * 修改数据
    *
    * @param menu 实例对象
    * @return 实例对象
    */
    @Override
    public int update(Menu menu){
        //加入逻辑代码
        return this.menuMapper.update(menu);
    }

    /**
    * 通过主键删除数据
    *
    * @param ids 主键list
    * @return 是否成功
    */
    @Override
    public int deleteByIds(List<Integer> ids){
        return this.menuMapper.deleteByIds(ids);
    }

    /**
    *查询结果数
    */
    @Override
    public long count(Map<String,Object> param){
        return this.menuMapper.count(param);
    }

    /**
    * 批量插入
    */
    @Override
    public int insertBatch(List<Menu> entities){
        return this.menuMapper.insertBatch(entities);
    }

    @Override
    public List<Integer> queryAllIds() {
        return this.menuMapper.queryAllIds();
    }
}
